home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AOL File Library: 2,801 to 2,900
/
aol-file-protocol-4400-2801-to-2900.zip
/
AOLDLs
/
C++ Files Library
/
USoundPlayer (PP)
/
USoundPlayer.sit
/
USoundPlayer
/
USoundPlayer.cp
< prev
next >
Wrap
Text File
|
1995-08-28
|
5KB
|
210 lines
// ===========================================================================
// USoundPlayer.cp ⌐ 1995, âric Forget. All rights reserved.
// ===========================================================================
//
// ************************************************************************
// * *
// * Before using this code you should read the "License Agreement" *
// * document and agree with it. *
// * *
// ************************************************************************
//
// USoundPlayer is a wrapper class to make life easier when playing a
// sound handle. You can play a sound by name, resource ID or SndListHandle.
//
// ---------------------------------------------------------------------------
//
// Instruction Notes:
// -----------------
//
// Call one of the USoundPlayer::PlaySound() method. That's all!
//
// ---------------------------------------------------------------------------
#include "USoundPlayer.h"
// ---------------------------------------------------------------------------
// Ñ Static member
// ---------------------------------------------------------------------------
USoundPlayer *USoundPlayer::sSoundPlayer = nil;
SndListHandle USoundPlayer::sSoundHandle = nil;
SndChannelPtr USoundPlayer::sSoundChannel = nil;
// ---------------------------------------------------------------------------
// Ñ Initialize()
// ---------------------------------------------------------------------------
void
USoundPlayer::Initialize()
{
if(sSoundPlayer == nil) {
sSoundPlayer = new USoundPlayer;
}
}
// ---------------------------------------------------------------------------
// Ñ Dispose
// ---------------------------------------------------------------------------
void
USoundPlayer::Dispose()
{
if(sSoundPlayer != nil) {
delete sSoundPlayer;
sSoundPlayer = nil;
}
}
// ---------------------------------------------------------------------------
// Ñ PlaySound
// ---------------------------------------------------------------------------
void
USoundPlayer::PlaySound(
ConstStr255Param inSoundName)
{
SndListHandle theSoundH = (SndListHandle)::GetNamedResource('snd ', inSoundName);
if(theSoundH) {
PlaySoundHandle(theSoundH);
}
}
// ---------------------------------------------------------------------------
// Ñ PlaySound
// ---------------------------------------------------------------------------
void
USoundPlayer::PlaySound(
ResIDT inSoundID)
{
SndListHandle theSoundH = (SndListHandle)::GetResource('snd ', inSoundID);
if(theSoundH) {
PlaySoundHandle(theSoundH);
}
}
// ---------------------------------------------------------------------------
// Ñ PlaySound
// ---------------------------------------------------------------------------
void
USoundPlayer::PlaySound(
SndListHandle inSoundHandle)
{
PlaySoundHandle(inSoundHandle);
}
// ---------------------------------------------------------------------------
// Ñ SpendTime
// ---------------------------------------------------------------------------
void
USoundPlayer::SpendTime(
const EventRecord & /*inMacEvent*/)
{
SCStatus theStatus;
OSErr err;
err = ::SndChannelStatus(sSoundChannel, sizeof(SCStatus), &theStatus);
if ((err != noErr) || (!theStatus.scChannelBusy)) {
StopCurrentSound();
}
}
// ---------------------------------------------------------------------------
// Ñ PlaySoundHandle
// ---------------------------------------------------------------------------
void
USoundPlayer::PlaySoundHandle(
SndListHandle inSoundHandle)
{
OSErr err = noErr;
Initialize();
StopCurrentSound();
sSoundHandle = inSoundHandle;
err = ::HandToHand((Handle *)&(sSoundHandle));
if (!err) {
if (!sSoundChannel) {
sSoundChannel = (SndChannelPtr) ::NewPtrClear(sizeof(SndChannel));
if (sSoundChannel != nil) {
sSoundChannel->qLength = stdQLength;
err = ::SndNewChannel(&sSoundChannel, sampledSynth, 0, nil);
if (err) {
::DisposePtr((Ptr)sSoundChannel);
sSoundChannel = nil;
}
}
}
if (sSoundHandle && sSoundChannel) {
::HLockHi((Handle)sSoundHandle);
err = ::SndPlay(sSoundChannel, sSoundHandle,true);
}
if (err) {
StopCurrentSound();
} else {
sSoundPlayer->StartIdling();
}
}
}
// ---------------------------------------------------------------------------
// Ñ StopCurrentSound
// ---------------------------------------------------------------------------
void
USoundPlayer::StopCurrentSound()
{
if (sSoundChannel) {
::SndDisposeChannel(sSoundChannel, true);
sSoundChannel = nil;
}
if (sSoundHandle) {
::DisposeHandle((Handle)sSoundHandle);
sSoundHandle = nil;
}
sSoundPlayer->StopIdling();
}